<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>03_闭包</title>
</head>

<body>

  <!-- 
      闭包:
        概念: 函数内的函数
        特点:
          1. 延长变量的生命周期
            => 优点: 变量生命周期延长了
            => 缺点: 需要一个 闭包 结构
          2. 可以在函数外部访问函数内的私有变量
            => 优点: 访问和使用变得更加灵活了
            => 缺点: 需要一个 闭包 结构
          3. 保护变量私有化
            => 优点: 变量不会污染全局
            => 缺点: 外部没有办法使用, 如果需要使用, 得写一个 闭包 结构
        出现: 
          => 需要一个不会被销毁的函数执行空间
          => 函数内, 直接 或者 间接 返回一个新的函数
          => 内部函数要使用着外部函数的私有变量
          => 管 内部函数 叫做 外部函数的 闭包函数
  -->


  <script>
    function outer1() {
      let a = 1;
      function inner1() {
        return a
      }
      return inner1
    }
    const res = outer1();
    const a = res();
    console.log(a);




    function outer2() {
      let a = 1;
      let b = 2;
      let obj = {
        getA: function () { return a },
        getB: function () { return b }
      }
      return obj
    }
    const result = outer2();
    const A = result.getA();
    const B = result.getB();
    console.log(A)
    console.log(B)
  </script>
</body>
</html>
